package demo02;

import java.io.FileWriter;
import java.io.IOException;

/*
 *  FileWriter文件字符输出流：写出字符到文件的便捷类，使用方式与FileOutputStream文件字节输出流相似
 * 
 *  FileWriter的构造方法：
 *      FileWriter(File file)：创建文件字符输出流，用于写入字符到指定的File对象
 *      FileWriter(String fileName)：创建文件字符输出流，用于写入字符到路径字符串指定的文件
 *      FileWriter(File file, boolean append)：创建文件字符输出流，用于写入字符到指定的File对象，指定是否追加写
 *      FileWriter(String name, boolean append)：创建文件字符输出流，用于写入字符到路径字符串指定的文件，指定是否追加写
 * 
 *  FileWriter的常用方法：
 *      write(int b)：写入一个字符，将参数字符写入文件
 *      write(char[] cbuf)：写入字符数组，将一组字符写入到文件
 *      write(char[] cbuf, int off, int len)：写入指定长度的字符数组，将一个字符数组中从off索引开始的len个字符写入到文件
 *      write(String str)：写入一个字符串，将字符串写入到文件
 *      write(String str, int off, int len)：写入指定长度的字符串，将一个字符串中从off索引开始的len个字符写入到文件
 *      flush()：刷新缓冲区，流对象可以继续使用
 *      close()：先刷新缓冲区，再关闭文件字符输出流，释放资源，流对象不再能使用
 * 
 *  文件字符输入流的使用步骤：
 *      1. 创建一个FileWriter对象，构造方法中绑定写入数据的目的地路径
 *      2. 调用FileWriter对象的方法write，写入数据到内存缓冲区中
 *      3. 调用FileWriter对象的方法flush，刷新缓冲区，让字符数据从缓冲区刷新到目的地文件中
 *      4. 释放资源（会先把内存缓冲区中的数据刷新到文件中）
 */
public class Demo02FileWriter {
    public static void main(String[] args) throws IOException {
        // 创建FileWriter对象，传递待写入字符的文件路径
        FileWriter fileWriter = new FileWriter("file\\d.txt", true); // true：追加写开关

        // 写入字符
        fileWriter.write(97); // a
        fileWriter.write("\r\n"); // 换行符
        fileWriter.flush(); // 刷新缓冲区，把字符数据从内存缓冲区刷新到文件中

        // 写入字符数组
        char[] chars = { 'T', 'o', 'a', 's', 't', 'i', 'e' };
        fileWriter.write(chars); // Toastie
        fileWriter.write(chars, 4, 3); // tie，写入字符数组从第off个索引开始的len个字符
        fileWriter.write("\r\n");
        fileWriter.flush();

        // 写入字符串
        fileWriter.write("土土"); // 土土
        fileWriter.write("土土，你是粑粑麻麻心爱的小孩~\r\n", 3, 13); // 你是粑粑麻麻心爱的小孩~
        fileWriter.flush();

        // 刷新缓冲区并释放资源
        fileWriter.close();
    }
}
